#include <iostream>
#include <string>
#include <fstream>
using namespace std;

//适配器代码
class OldLogger
{
public:
    void logToFile(const std::string &message, const std::string &file)
    {
        // 旧方法：需指定文件名写入日志
        std::ofstream fout(file);
        fout << "[OLD] " << message << std::endl;
        cout << "[OLD] " << message << std::endl;
    }
};
class NewLogger
{
public:
    virtual ~NewLogger() = default;
    virtual void log(const std::string &message) = 0; // 新接口：无需文件名
};
class LoggerAdapter : public NewLogger
{
private:
    OldLogger oldLogger; // 持有旧系统的实例
    std::string defaultFile = "default.log";

public:
    explicit LoggerAdapter(const std::string &file) : defaultFile(file) {}

    void log(const std::string &message) override
    {
        // 调用旧方法，但隐藏文件名参数
        oldLogger.logToFile(message, defaultFile);
    }
};

void clientCode(NewLogger &logger)
{
    logger.log("Hello, Adapter Pattern!");
}

int main()
{
    LoggerAdapter adapter("app.log"); // 适配器适配旧日志类
    clientCode(adapter);              // 客户端无需感知旧接口
    return 0;
}